<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div></div>
</body>

</html>
<script>
    // 深拷贝改其中一个不影响另外一个
    var obj = { name: '倒霉', age: 30, sex: true, hobby: ['打球', '睡觉'] }
    // var obj1=obj//这种想法无法实现深拷贝，修改其中一个变量的数据会直接影响到另一个变量的数据
    //循环遍历(思路:循环遍历其中一个对象的每个属性，将对象的每个属性和属性的值添加到另一个对象中
    var obj1 = {}
    // for (var key in obj) {//key是属性名，obj[key]是属性值
    //     obj1[key] = obj[key]
    // }
    // console.log(obj);
    // console.log(obj1);
    // obj.name = '生气'
    // console.log(obj);
    // console.log(obj1);
    // obj.hobby.push('abo')
    // console.log(obj);
    // console.log(obj1);

    function copyObj(obj) {
        //判断obj是否是数组类型，如果是数组类型，则obj2被 初始化为空数组，否则初始化为空对象
        var obj1 = Array.isArray(obj) ? [] : {};

        for (var key in obj) {
            if (typeof (obj[key]) == 'object') {//判断key属性的值是否是引用类型，如果是，则需要继续循环遍历处理该属性的值(递归处理)
                obj1[key] = copyObj(obj[key])
            }
            else {//key属性的值不是引用类型，直接拷贝该属性的值
                obj1[key] = obj[key]
            }
        }
        return obj1
    }
    var obj1 = copyObj(obj);
    // console.log(obj1);
    obj.hobby.push('abo')
    console.log(obj);
    console.log(obj1);
</script>